package com.lakeworks.mapper;

import com.lakeworks.domain.status.PostRecord;
import com.lakeworks.domain.status.PostWrap;
import com.lakeworks.domain.status.StatusRecord;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 包装记录Mapper接口
 *
 * @author lake
 * @date 2023-02-23
 */
public interface PostWrapMapper {

    @Insert("insert into `${table}` (product_id,user_id,create_by,modify_by,flag) values(#{oprProductId},#{userId},#{userName},#{userName},#{flag})")
    int savePostRecord(@Param("table") String table, @Param("oprProductId") Long oprProductId, @Param("userId") Long userId, @Param("userName") String userName,@Param("flag") Integer flag);

    @Insert("insert into `${table}` (${field},status,user_id,create_by,modify_by,flag) values(#{objId},#{status},#{userId},#{userName},#{userName},#{flag})")
    int saveStatusRecord(@Param("table") String table, @Param("field") String field, @Param("objId") Long objId, @Param("status") String status, @Param("userId") Long userId, @Param("userName") String userName,@Param("flag") Integer flag);

    @Select("select id,product_id productId,user_id userId,create_at createAt,create_by createBy,modify_at modifyAt,modify_by modifyBy,flag from `${table}` where product_id = #{oprProductId} and flag & 512 != 512 order by id desc limit 1")
    PostRecord queryPostRecord(@Param("table") String table, @Param("oprProductId") Long oprProductId);

    @Select("SELECT id,${field} fieldId,`status`,user_id userId,\n" +
            "create_at createAt,create_by createBy,\n" +
            "modify_at modifyAt,modify_by modifyBy,flag\n" +
            "FROM ${table}\n" +
            "WHERE ${field} = #{objId}\n" +
            "AND `status` = #{status}\n" +
            "and flag & 512 != 512\n" +
            "order by id desc limit 1")
    StatusRecord queryStatusRecord(@Param("table") String table, @Param("field") String field, @Param("objId") Long objId, @Param("status") String status);

    /**
     * 查询包装记录
     *
     * @param id 包装记录主键
     * @return 包装记录
     */
    PostWrap selectPostWrapById(Long id);

    /**
     * 查询包装记录列表
     *
     * @param postWrap 包装记录
     * @return 包装记录集合
     */
    List<PostWrap> selectPostWrapList(PostWrap postWrap);

    /**
     * 新增包装记录
     *
     * @param postWrap 包装记录
     * @return 结果
     */
    int insertPostWrap(PostWrap postWrap);

    /**
     * 修改包装记录
     *
     * @param postWrap 包装记录
     * @return 结果
     */
    int updatePostWrap(PostWrap postWrap);

    /**
     * 删除包装记录
     *
     * @param id 包装记录主键
     * @return 结果
     */
    int deletePostWrapById(Long id);

    /**
     * 批量删除包装记录
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deletePostWrapByIds(Long[] ids);


    List<PostWrap> selectPostWrapNow();
}
